package common;

import java.util.ArrayList;

public class NumberVO {
    
    /**
     * 현재 VO가 대표할 번호를 지정 - int type
     */
    private int number;
        
    /**
     * 당첨된 횟수를 저장
     */
    private int winningCounter;
    
    /**
     * 당첨 회차를 List 로 저장
     */
    private ArrayList<Integer> winningHistory = new ArrayList<Integer>();
        
    /**
     * 생성자
     * 
     * @param number int
     */
    public NumberVO(int number) {
        this.number = number;
        
    }
    
    /**
     * 새로운 당첨 회차를 저장
     *
     * @param gameIndex
     */
    public void addWinning(int gameIndex) {
        if (gameIndex > 0) {
            winningCounter++;
            winningHistory.add(gameIndex);
        }
    }
    
    /**
     * 
     * 당첨에 소요된 평균 기간을 구한다.
     * 
     * 2번째 인자로 당첨 기간을 필터링 할 수 있다.
     *
     * @param currentGameIndex
     * @param filteringPeriod
     * @return double - 당첨에 소요되는 평균 기간
     */
    public double getAverageWinningPeriod(int currentGameIndex, int filteringPeriod) {
        int sum = 0;
        
        // 두 수 사이의 차이를 평균하니까 index 는 -1 까지 증가한다.
        for ( int idx = 0 ; idx < winningHistory.size() - 1 ; idx++ ) {
            int previousWinningIndex = winningHistory.get(idx);
            
            // 만약 현재 게임 회차 - 필터링 기간 보다 작은 index 값이라면, skip
            if ( previousWinningIndex < (currentGameIndex - filteringPeriod) ) continue;
            
            int nextWinningIndex = winningHistory.get(idx + 1);
            
            sum += nextWinningIndex - previousWinningIndex;
        }
        
        return sum / winningHistory.size() ;
    }

    /*
     * Getter / Setter
     */
    public int getWinningCounter() {
        return winningCounter;
    }

    public int getNumber() {
        return number;
    }
}
